package demo5;

//2023天梯赛真题练习
//
//import java.util.*;
//
//public class Main {
//    public static void main(String[] args) {
//        Scanner scanner = new Scanner(System.in);
//        int n = scanner.nextInt(); //学校数量
//        int c = scanner.nextInt(); //每个考场容量
//        int sum = 0;
//        PriorityQueue<Integer> cnt = new PriorityQueue<>((a,b)->b-a);
//        for (int i = 0; i < n; i++) {
//            String name = scanner.next();
//            int a = scanner.nextInt();
//            cnt.add(a);
//            sum += a;
//            int ret = a / c;
//            if (a % c != 0) ret++;
//            System.out.println(name + " " + ret);
//        }
//
//        int res = 0;
//        //小根堆
//        PriorityQueue<Integer> queue = new PriorityQueue<>();
//        while (!cnt.isEmpty()){
//            int count = cnt.poll();
//            if(count >= c) {
//                res += count/c;
//                int k = count%c;
//                if(k!=0) {
//                    cnt.add(count%c);
//                }
//            }else {
//                if(queue.isEmpty()) {
//                    queue.add(count);
//                    res++;
//                    continue;
//                }
//                int peek = queue.peek();
//                if(peek + count <= c) {
//                    queue.poll();
//                    queue.add(peek+count);
//                }else {
//                    queue.add(count);
//                    res++;
//                }
//            }
//        }
//        System.out.println(res);
//    }
//}

//[10, 15, 20, 21, 30, 36, 39, 42, 93, 168]
// 0    0   0   0   1   1   1   1   3    5
// 21 27 21 20 15
//
//import java.util.LinkedList;
//import java.util.Queue;
//import java.util.Scanner;
//
//public class Main {
//    static String[] map;
//    static boolean[][] st;
//    static int res1;
//    static int res2;
//    static int[] xx = {1,-1,0,0};
//    static int[] yy = {0,0,1,-1};
//    static int n,m;
//
//    public static void main(String[] args) {
//        Scanner scanner = new Scanner(System.in);
//        n = scanner.nextInt();
//        m = scanner.nextInt();
//        st = new boolean[n][m];
//        map = new String[n];
//        for(int i =0 ;i <n;i ++) {
//            map[i] = scanner.next();
//        }
//
//        //处理边界
//        for(int i = 0; i<n; i++) {
//            if(map[i].charAt(0) != '0' && !st[i][0]) {
//                st[i][0] = true;
//                if(bfs(i,0)) res2++;
//                res1++;
//            }
//            if(map[i].charAt(m-1)!='0' && !st[i][m-1]) {
//                st[i][m-1] = true;
//                if(bfs(i,m-1)) res2++;
//                res1++;
//            }
//        }
//        for(int i = 0; i<m; i++) {
//            if(map[0].charAt(i)!='0' && !st[0][i]) {
//                st[0][i] = true;
//                if(bfs(0,i)) res2++;
//                res1++;
//            }
//            if(map[n-1].charAt(i)!='0' && !st[n-1][i]) {
//                st[n-1][i] = true;
//                if(bfs(n-1,i)) res2++;
//                res1++;
//            }
//        }
//
//        for(int i = 1; i<n-1; i++) {
//            for(int j = 1; j<m-1; j++) {
//                if(map[i].charAt(j)!='0' && !st[i][j]) {
//                    st[i][j] = true;
//                    if(bfs(i,j)) res2++;
//                    res1++;
//                }
//            }
//        }
//
//        System.out.println(res1 + " " +res2);
//    }
//
//    public static boolean bfs(int a, int b) {
//        boolean flag = false;
//        Queue<int[]> queue = new LinkedList<>();
//        queue.add(new int[]{a,b});
//        while (!queue.isEmpty()) {
//            int[] peek = queue.poll();
//            int x = peek[0];
//            int y = peek[1];
//            if(map[x].charAt(y) >='2') flag = true;
//            for(int i = 0; i<4; i++) {
//                int dx = x + xx[i];
//                int dy = y + yy[i];
//                if(dx >= 0 && dx < n && dy >= 0 && dy < m && map[dx].charAt(dy)!='0' && !st[dx][dy]) {
//                    st[dx][dy] = true;
//                    queue.add(new int[]{dx,dy});
//                }
//            }
//        }
//
//        return flag;
//    }
//}


import java.util.*;

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String[] strs = new String[n];
        for(int i = 0; i<n; i++) {
            strs[i] = sc.next();
        }
        String x = sc.next();
        int[] hash = new int[186];
        for(int i = 0; i<x.length(); i++) {
            char ch = x.charAt(i);
            hash[ch]++;
        }
        int k = sc.nextInt();
        List<String>list = new ArrayList();
        for(int i = 0; i<n; i++) {
            if(check(hash, strs[i], x)) {
                list.add(strs[i]);
            }
        }
        //System.out.println(list);
        Collections.sort(list);
        System.out.println(list.size());
        if(k<list.size()) {
            System.out.println(list.get(k-1));
        }
    }
    public static boolean check(final int[] hash, String s, String x) {
        if(x.equals(s)) {
            return false;
        }
        int[] t = new int[128];
        for(int i = 0; i<s.length(); i++) {
            t[s.charAt(i)]++;
        }
        for(int i = 0; i<128; i++) {
            if(hash[i]!=t[i]) {
                return false;
            }
        }
        return true;
    }
}